package com.wlxk.base.mybatisplus.manager;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wlxk.base.common.constant.RowStatusEnum;
import com.wlxk.base.common.query.WlQuery;
import com.wlxk.base.common.util.WlPreconditions;
import com.wlxk.base.mybatisplus.entity.BaseDO;
import com.wlxk.core.tool.WlEmptyUtil;

import java.util.List;

/**
 * @author ：wlxk
 * @since ：2022/1/21 14:20
 */
public abstract class SimpleManager<M extends BaseMapper<T>, T extends BaseDO, Q extends WlQuery> extends BaseManager<M, T, Q> {

    /**
     * 保存 自动填充创建人
     *
     * @param entity 入参
     * @return 结果
     */
    public Boolean saveWithCreator(T entity) {
        WlPreconditions.checkParam(null != entity, "保存失败，参数为空");
        entity.setRowStatus(RowStatusEnum.NORMAL.code);
//        entity.setCreator(SessionUtil.getCurrentLoginId());
        return save(entity);
    }

    /**
     * 批量保存 自动填充创建人
     *
     * @param entityList 入参
     * @return 结果
     */
    public Boolean saveBatchWithCreator(List<T> entityList) {
        WlPreconditions.checkParam(!WlEmptyUtil.isEmpty(entityList), "保存失败，参数为空");
        entityList.forEach(entity -> {
            entity.setRowStatus(RowStatusEnum.NORMAL.code);
//            entity.setCreator(SessionUtil.getCurrentLoginId());
        });
        return saveBatch(entityList);
    }

    /**
     * 保存 自动填充创建人
     *
     * @param entity 入参
     * @return 结果
     */
    public Boolean updateWithOperator(T entity) {
        WlPreconditions.checkParam(null != entity, "更新失败，参数为空");
        WlPreconditions.checkParam(null != entity.getId(), "更新失败，id为空");
//        entity.setOperator(SessionUtil.getCurrentLoginId());
        return updateById(entity);
    }

    /**
     * 逻辑删除 自动填充操作人
     *
     * @param id id
     * @return 结果
     */
    public Boolean logicDeleteWithOperator(Long id) {
        WlPreconditions.checkParam(null != id, "删除失败，id不能为空");
        T entity = getById(id);
        WlPreconditions.checkParam(null != entity, "删除失败，数据不存在");
//        entity.setOperator(SessionUtil.getCurrentLoginId());
        //更新 行状态
        entity.setRowStatus(RowStatusEnum.DELETE.code);
        return updateById(entity);
    }

}
